package com.lhh.springcloud.service.imp;

import com.lhh.springcloud.dao.OrderMapper;
import com.lhh.springcloud.entity.Order;
import com.lhh.springcloud.service.OrderService;
import io.seata.spring.annotation.GlobalTransactional;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

/**
 * @author 李洪豪
 * @Sno 20220301044
 */
@Service
public class OrderServiceImp implements OrderService {
    @Resource
    private OrderMapper orderMapper;
    @Override
    //1.应当放在Service层，@GlobalTransactional通常用于标记一个方法为全局事务（即分布式事务）的起点。
    //2.❌ 不放在 Controller 层的原因：
    //Controller 应只负责接收请求和返回响应，不处理核心业务逻辑
    //分布式事务应由业务逻辑层统一管理，而不是暴露给接口层
    //❌ 不放在 Mapper（DAO）层的原因：
    //Mapper 只负责单个 SQL 操作，不具备组合多个操作的能力
    //事务控制粒度太大或太小都不合适
    //3.name自己制定，rollback：当发生异常的时候会发生回滚
    @GlobalTransactional(name = "lhh_order_tx_group", rollbackFor = Exception.class)
    public void addOrder(Order order) {
        orderMapper.addOrder(order);
    }

    @Override
    public void updateOrderStatus(Long user_id, Integer status) {
        orderMapper.updateOrderStatus(user_id,status);
    }
}
